Node.js Multer使用
图片上传是web开发中经常用到的功能,node社区在这方面也有了相对完善的支持。
常用的开源组件有multer、formidable等,借助这两个开源组件,可以轻松搞定图片上传。
我们项目中就主要用到了multer来上传图片
环境初始化
非常简单,一行命令。 cnpm install multer --save
multer使用(中间件)
我们和Joi的使用一样,也是使用中间件的形式,我们看看我们uploader的书写
const multer = require('multer') ... const userStorage = multer.diskStorage({ destination: 'public/images/userImage/', filename: function (req, file, cb) { var fileformat = (file.originalname).split('.') cb(null, fileformat[0] + '-' + Date.now() + '.' + fileformat[fileformat.length - 1]) } }) module.exports = { ... userImg: multer({ storage: userStorage }) }
在我们的使用中,我们定义了一个multer.diskStorage,指定了图片上传的位置以及存储的图片的文件名,完成了该中间件后,export该中间件
然后,我们就可以作为一个中间件在routes.js中使用, 如下
app.put('/user', uploader.userImg.single('image'), authController.updateUser)
那么,经过该中间件后,文件信息存储到req的哪个地方呢?
单文件的话,他的信息就存储在我们的req.file.path里,我们可以在conrtoller中进行使用
await user.update({ username: req.body.username, email: req.body.email, phone: req.body.phone, img: (req.file) ? req.file.path : user.img })
多文件的话就存储在req.files里,具体使用同学们可以上他的github文档查看,这篇博客主要说说我们的项目中的使用
github地址: https://github.com/expressjs/multer